# Copyright 2020 The Dawn Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

DawnGenerator(
    SCRIPT "${Dawn_SOURCE_DIR}/generator/dawn_version_generator.py"
    PRINT_NAME "Dawn version based utilities"
    ARGS "--dawn-dir"
         "${Dawn_SOURCE_DIR}"
    RESULT_VARIABLE "DAWN_VERSION_AUTOGEN_SOURCES"
)

DawnGenerator(
    SCRIPT "${Dawn_SOURCE_DIR}/generator/dawn_gpu_info_generator.py"
    PRINT_NAME "Dawn GPU info utilities"
    ARGS "--gpu-info-json"
         "${Dawn_SOURCE_DIR}/src/dawn/gpu_info.json"
    RESULT_VARIABLE "DAWN_GPU_INFO_AUTOGEN_SOURCES"
)

add_library(dawn_common STATIC ${DAWN_PLACEHOLDER_FILE})
common_compile_options(dawn_common)
target_sources(dawn_common PRIVATE
    ${DAWN_VERSION_AUTOGEN_SOURCES}
    ${DAWN_GPU_INFO_AUTOGEN_SOURCES}
    "Alloc.h"
    "Assert.cpp"
    "Assert.h"
    "BitSetIterator.h"
    "Compiler.h"
    "ConcurrentCache.h"
    "Constants.h"
    "ContentLessObjectCache.h"
    "ContentLessObjectCacheable.h"
    "CoreFoundationRef.h"
    "DynamicLib.cpp"
    "DynamicLib.h"
    "GPUInfo.cpp"
    "GPUInfo.h"
    "HashUtils.h"
    "IOKitRef.h"
    "LinkedList.h"
    "Log.cpp"
    "Log.h"
    "Math.cpp"
    "Math.h"
    "Mutex.cpp"
    "Mutex.h"
    "MutexProtected.h"
    "NSRef.h"
    "NonCopyable.h"
    "Numeric.h"
    "PlacementAllocated.h"
    "Platform.h"
    "Preprocessor.h"
    "Ref.h"
    "RefBase.h"
    "RefCounted.cpp"
    "RefCounted.h"
    "Result.cpp"
    "Result.h"
    "SerialMap.h"
    "SerialQueue.h"
    "SerialStorage.h"
    "SlabAllocator.cpp"
    "SlabAllocator.h"
    "StackContainer.h"
    "SystemUtils.cpp"
    "SystemUtils.h"
    "TypeTraits.h"
    "TypedInteger.h"
    "UnderlyingType.h"
    "WeakRef.h"
    "WeakRefSupport.cpp"
    "WeakRefSupport.h"
    "ityp_array.h"
    "ityp_bitset.h"
    "ityp_span.h"
    "ityp_stack_vec.h"
    "ityp_vector.h"
    "vulkan_platform.h"
    "xlib_with_undefs.h"
)

if (WIN32)
    target_sources(dawn_common PRIVATE
        "WindowsUtils.cpp"
        "WindowsUtils.h"
        "windows_with_undefs.h"
    )
elseif(APPLE)
    target_sources(dawn_common PRIVATE
        "SystemUtils_mac.mm"
    )
endif()

target_link_libraries(dawn_common PUBLIC dawncpp_headers PRIVATE dawn_internal_config)

# TODO Android Log support
# TODO Vulkan headers support
